#include "RoutingOp.h"
#include "RoutingConnection.h"
using namespace WONAPI;

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
RoutingOp::RoutingOp()
{
	mIsDerivedServerOp = false;
}

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
RoutingOp::RoutingOp(RoutingConnection *theConnection) : 
	mConnection(theConnection), 
	mSendMsg(theConnection->GetLengthFieldSize()) 
{
	mIsDerivedServerOp = false;
}

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
void RoutingOp::InitSendMsg(unsigned char theMsgType)
{
	mSendMsg.Reset(); 
	mSendMsg.AppendByte(3); // Mini Message
	mSendMsg.AppendByte(mIsDerivedServerOp?8:7); // RoutingServerG2
	mSendMsg.AppendByte(theMsgType);
}

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
void RoutingOp::SendMsg()
{
	mConnection->QueueOp(new SendMsgOp(mSendMsg.ToByteBuffer()));
}

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
void RoutingOp::AddOp()
{
	mConnection->AddOp(this);
}

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
void RoutingOp::RunHook()
{
	if(GetMode()==OP_MODE_BLOCK)
	{
		Finish(WS_BlockMode_NotSupported);
		return;
	}

	SendRequest();
}


